import { HmacSHA1, enc } from 'crypto-js'

/**
 * 生成 OneNET 鉴权信息 (浏览器环境)
 * @param {String} method - 哈希方法 'sha1'
 * @param {String} res - 资源路径
 * @param {String} accessKey - 访问密钥
 * @param {Number} et - 有效时间(毫秒)
 * @return {String} 鉴权字符串
 */
export function generateAuthorization()
{
  const version = '2022-05-01'
  const method = 'sha1'
  const accessKey = 'mb+ddzkFlzdLP3W3U3t9O1mF6xXxieED33/XM'
  const res = 'userid/428375'
  const et = 3600 * 1000 // 1小时有效
  const etSeconds = Math.floor((Date.now() + et) / 1000) // 秒级时间戳

  // 1. 处理AccessKey（兼容处理）
  let key
  try
  {
    // 尝试Base64解码（适用于标准Base64密钥）
    key = enc.Base64.parse(accessKey)
  }
  catch (e)
  {
    // 如果解码失败，直接使用原始字符串（适用于明文密钥）
    console.warn('AccessKey不是标准Base64格式，将作为明文处理')
    key = enc.Utf8.parse(accessKey)
  }

  // 2. 构造签名字符串（严格按顺序+换行符）
  const signStr = `${etSeconds}\n${method}\n${res}\n${version}`

  // 3. 计算HMAC-SHA1签名
  const signature = HmacSHA1(signStr, key).toString(enc.Base64)

  // 4. 生成鉴权头
  return `version=${version}&res=${encodeURIComponent(
    res
  )}&et=${etSeconds}&method=${method}&sign=${encodeURIComponent(signature)}`
}
